//32 tap forward filter
module forward_filter
	#(parameter length = 16)
	(
		input signed [length-1:0] IS0,
		input signed [length-1:0] IS1,
		input signed [length-1:0] IS2,
		input signed [length-1:0] IS3,
		input signed [length-1:0] IS4,
		input signed [length-1:0] IS5,
		input signed [length-1:0] IS6,
		input signed [length-1:0] IS7,
		input signed [length-1:0] IS8,
		input signed [length-1:0] IS9,
		input signed [length-1:0] IS10,
		input signed [length-1:0] IS11,
		input signed [length-1:0] IS12,
		input signed [length-1:0] IS13,
		input signed [length-1:0] IS14,
		input signed [length-1:0] IS15,
		input signed [length-1:0] IS16,
		input signed [length-1:0] IS17,
		input signed [length-1:0] IS18,
		input signed [length-1:0] IS19,
		input signed [length-1:0] IS20,
		input signed [length-1:0] IS21,
		input signed [length-1:0] IS22,
		input signed [length-1:0] IS23,
		input signed [length-1:0] IS24,
		input signed [length-1:0] IS25,
		input signed [length-1:0] IS26,
		input signed [length-1:0] IS27,
		input signed [length-1:0] IS28,
		input signed [length-1:0] IS29,
		input signed [length-1:0] IS30,
		input signed [length-1:0] IS31,

		input signed [length-1:0] W0,
		input signed [length-1:0] W1,
		input signed [length-1:0] W2,
		input signed [length-1:0] W3,
		input signed [length-1:0] W4,
		input signed [length-1:0] W5,
		input signed [length-1:0] W6,
		input signed [length-1:0] W7,
		input signed [length-1:0] W8,
		input signed [length-1:0] W9,
		input signed [length-1:0] W10,
		input signed [length-1:0] W11,
		input signed [length-1:0] W12,
		input signed [length-1:0] W13,
		input signed [length-1:0] W14,
		input signed [length-1:0] W15,
		input signed [length-1:0] W16,
		input signed [length-1:0] W17,
		input signed [length-1:0] W18,
		input signed [length-1:0] W19,
		input signed [length-1:0] W20,
		input signed [length-1:0] W21,
		input signed [length-1:0] W22,
		input signed [length-1:0] W23,
		input signed [length-1:0] W24,
		input signed [length-1:0] W25,
		input signed [length-1:0] W26,
		input signed [length-1:0] W27,
		input signed [length-1:0] W28,
		input signed [length-1:0] W29,
		input signed [length-1:0] W30,
		input signed [length-1:0] W31,

		output signed [2*length+4:0] parallel_compressor_out
		);

wire signed [2*length-1:0] Mult_result0;
wire signed [2*length-1:0] Mult_result1;
wire signed [2*length-1:0] Mult_result2;
wire signed [2*length-1:0] Mult_result3;
wire signed [2*length-1:0] Mult_result4;
wire signed [2*length-1:0] Mult_result5;
wire signed [2*length-1:0] Mult_result6;
wire signed [2*length-1:0] Mult_result7;
wire signed [2*length-1:0] Mult_result8;
wire signed [2*length-1:0] Mult_result9;
wire signed [2*length-1:0] Mult_result10;
wire signed [2*length-1:0] Mult_result11;
wire signed [2*length-1:0] Mult_result12;
wire signed [2*length-1:0] Mult_result13;
wire signed [2*length-1:0] Mult_result14;
wire signed [2*length-1:0] Mult_result15;
wire signed [2*length-1:0] Mult_result16;
wire signed [2*length-1:0] Mult_result17;
wire signed [2*length-1:0] Mult_result18;
wire signed [2*length-1:0] Mult_result19;
wire signed [2*length-1:0] Mult_result20;
wire signed [2*length-1:0] Mult_result21;
wire signed [2*length-1:0] Mult_result22;
wire signed [2*length-1:0] Mult_result23;
wire signed [2*length-1:0] Mult_result24;
wire signed [2*length-1:0] Mult_result25;
wire signed [2*length-1:0] Mult_result26;
wire signed [2*length-1:0] Mult_result27;
wire signed [2*length-1:0] Mult_result28;
wire signed [2*length-1:0] Mult_result29;
wire signed [2*length-1:0] Mult_result30;
wire signed [2*length-1:0] Mult_result31;

Mult_array
	#(length)
	Mult_array_u0
	(
		.IS0				(IS0			),
		.IS1				(IS1			),
		.IS2				(IS2			),
		.IS3				(IS3			),
		.IS4				(IS4			),
		.IS5				(IS5			),
		.IS6				(IS6			),
		.IS7				(IS7			),
		.IS8				(IS8			),
		.IS9				(IS9			),
		.IS10				(IS10			),
		.IS11				(IS11			),
		.IS12				(IS12			),
		.IS13				(IS13			),
		.IS14				(IS14			),
		.IS15				(IS15			),
		.IS16				(IS16			),
		.IS17				(IS17			),
		.IS18				(IS18			),
		.IS19				(IS19			),
		.IS20				(IS20			),
		.IS21				(IS21			),
		.IS22				(IS22			),
		.IS23				(IS23			),
		.IS24				(IS24			),
		.IS25				(IS25			),
		.IS26				(IS26			),
		.IS27				(IS27			),
		.IS28				(IS28			),
		.IS29				(IS29			),
		.IS30				(IS30			),
		.IS31				(IS31			),
		
		.W0					(W0				),
		.W1					(W1				),
		.W2					(W2				),
		.W3					(W3				),
		.W4					(W4				),
		.W5					(W5				),
		.W6					(W6				),
		.W7					(W7				),
		.W8					(W8				),
		.W9					(W9				),
		.W10				(W10			),	
		.W11				(W11			),	
		.W12				(W12			),	
		.W13				(W13			),	
		.W14				(W14			),	
		.W15				(W15			),	
		.W16				(W16			),	
		.W17				(W17			),	
		.W18				(W18			),	
		.W19				(W19			),	
		.W20				(W20			),	
		.W21				(W21			),	
		.W22				(W22			),	
		.W23				(W23			),	
		.W24				(W24			),	
		.W25				(W25			),	
		.W26				(W26			),	
		.W27				(W27			),	
		.W28				(W28			),	
		.W29				(W29			),	
		.W30				(W30			),	
		.W31				(W31			),	
	
		.Mult_result0		(Mult_result0	),
		.Mult_result1		(Mult_result1	),
		.Mult_result2		(Mult_result2	),
		.Mult_result3		(Mult_result3	),
		.Mult_result4		(Mult_result4	),
		.Mult_result5		(Mult_result5	),
		.Mult_result6		(Mult_result6	),
		.Mult_result7		(Mult_result7	),
		.Mult_result8		(Mult_result8	),
		.Mult_result9		(Mult_result9	),
		.Mult_result10		(Mult_result10	),
		.Mult_result11		(Mult_result11	),
		.Mult_result12		(Mult_result12	),
		.Mult_result13		(Mult_result13	),
		.Mult_result14		(Mult_result14	),
		.Mult_result15		(Mult_result15	),
		.Mult_result16		(Mult_result16	),
		.Mult_result17		(Mult_result17	),
		.Mult_result18		(Mult_result18	),
		.Mult_result19		(Mult_result19	),
		.Mult_result20		(Mult_result20	),
		.Mult_result21		(Mult_result21	),
		.Mult_result22		(Mult_result22	),
		.Mult_result23		(Mult_result23	),
		.Mult_result24		(Mult_result24	),
		.Mult_result25		(Mult_result25	),
		.Mult_result26		(Mult_result26	),
		.Mult_result27		(Mult_result27	),
		.Mult_result28		(Mult_result28	),
		.Mult_result29		(Mult_result29	),
		.Mult_result30		(Mult_result30	),
		.Mult_result31		(Mult_result31	)
	);

parallel_compressor
	#(length)
	parallel_compressor_u0
	(
		.Mult_result0		(Mult_result0	),
		.Mult_result1		(Mult_result1	),
		.Mult_result2		(Mult_result2	),
		.Mult_result3		(Mult_result3	),
		.Mult_result4		(Mult_result4	),
		.Mult_result5		(Mult_result5	),
		.Mult_result6		(Mult_result6	),
		.Mult_result7		(Mult_result7	),
		.Mult_result8		(Mult_result8	),
		.Mult_result9		(Mult_result9	),
		.Mult_result10		(Mult_result10	),
		.Mult_result11		(Mult_result11	),
		.Mult_result12		(Mult_result12	),
		.Mult_result13		(Mult_result13	),
		.Mult_result14		(Mult_result14	),
		.Mult_result15		(Mult_result15	),
		.Mult_result16		(Mult_result16	),
		.Mult_result17		(Mult_result17	),
		.Mult_result18		(Mult_result18	),
		.Mult_result19		(Mult_result19	),
		.Mult_result20		(Mult_result20	),
		.Mult_result21		(Mult_result21	),
		.Mult_result22		(Mult_result22	),
		.Mult_result23		(Mult_result23	),
		.Mult_result24		(Mult_result24	),
		.Mult_result25		(Mult_result25	),
		.Mult_result26		(Mult_result26	),
		.Mult_result27		(Mult_result27	),
		.Mult_result28		(Mult_result28	),
		.Mult_result29		(Mult_result29	),
		.Mult_result30		(Mult_result30	),
		.Mult_result31		(Mult_result31	),

		.parallel_compressor_out	(parallel_compressor_out)
		);

endmodule